import { defineConfig, type UserConfigExport } from '@tarojs/cli'
import devConfig from './dev'
import prodConfig from './prod'
import path from 'path'
import tailwindcss from 'tailwindcss'
import { UnifiedViteWeappTailwindcssPlugin as uvtw } from 'weapp-tailwindcss/vite'

// https://taro-docs.jd.com/docs/next/config#defineconfig-辅助函数
export default defineConfig<'vite'>(async (merge, { command, mode }) => {
    const baseConfig: UserConfigExport<'vite'> = {
      projectName: 'taro-starter',
        date: '2025-9-26',
        designWidth: 750,
        deviceRatio: {
            640: 2.34 / 2,
            750: 1,
            375: 2,
            828: 1.81 / 2
        },
        sourceRoot: 'src',
        outputRoot: `dist/${process.env.TARO_ENV}`,
        plugins: [],
        defineConstants: {
            IS_H5: JSON.stringify(process.env.TARO_ENV === 'h5'),
            IS_RN: JSON.stringify(process.env.TARO_ENV === 'rn'),
            IS_WEAPP: JSON.stringify(process.env.TARO_ENV === 'weapp'),
        },
        alias: {
            '@/store': path.resolve(__dirname, '..', 'src/store'),
            '@/hooks': path.resolve(__dirname, '..', 'src/hooks'),
            '@/services': path.resolve(__dirname, '..', 'src/services'),
            '@/constants': path.resolve(__dirname, '..', 'src/constants'),
            '@/components': path.resolve(__dirname, '..', 'src/components'),
            '@/utils': path.resolve(__dirname, '..', 'src/utils'),
            '@/assets': path.resolve(__dirname, '..', 'src/assets'),
            '@/styles': path.resolve(__dirname, '..', 'src/styles'),
        },
        copy: {
            patterns: [
            ],
            options: {
            }
        },
        framework: 'react',
        compiler: {
            type: 'vite',
            vitePlugins: [
                {
                    name: 'postcss-config-loader-plugin',
                    config(config) {
                        // 加载 tailwindcss
                        if (typeof config.css?.postcss === 'object') {
                            // @ts-ignore
                            config.css?.postcss.plugins?.unshift(tailwindcss())
                        }
                    },
                },
                uvtw({
                    rem2rpx: true,
                    // 除了小程序这些，其他平台都 disabled
                    disabled: process.env.TARO_ENV === 'h5' || process.env.TARO_ENV === 'harmony' || process.env.TARO_ENV === 'rn',
                    injectAdditionalCssVarScope: true,
                }),
                {
                    name: 'scss-silence-deprecations-plugin',
                    config(config) {
                        const preprocessorOptions = config.css?.preprocessorOptions
                        if (!preprocessorOptions) {
                            return
                        }

                        const scss = preprocessorOptions?.scss || {}
                        const silenceDeprecations = ['legacy-js-api', 'import', 'global-builtin']
                        if (scss.silenceDeprecations) {
                            silenceDeprecations.push(...scss.silenceDeprecations)
                        }
                        else {
                            scss.silenceDeprecations = silenceDeprecations
                        }

                        preprocessorOptions.scss = scss
                    },
                },
            ],
        },
        mini: {
            postcss: {
                pxtransform: {
                    enable: true,
                    config: {

                    }
                },
                cssModules: {
                    enable: false, // 默认为 false，如需使用 css modules 功能，则设为 true
                    config: {
                        namingPattern: 'module', // 转换模式，取值为 global/module
                        generateScopedName: '[name]__[local]___[hash:base64:5]'
                    }
                }
            },
        },
        h5: {
            publicPath: '/',
            staticDirectory: 'static',

            miniCssExtractPluginOption: {
                ignoreOrder: true,
                filename: 'css/[name].[hash].css',
                chunkFilename: 'css/[name].[chunkhash].css'
            },
            postcss: {
                autoprefixer: {
                    enable: true,
                    config: {}
                },
                cssModules: {
                    enable: false, // 默认为 false，如需使用 css modules 功能，则设为 true
                    config: {
                        namingPattern: 'module', // 转换模式，取值为 global/module
                        generateScopedName: '[name]__[local]___[hash:base64:5]'
                    }
                }
            },
        },
        rn: {
            appName: 'taroDemo',
            postcss: {
                cssModules: {
                    enable: false, // 默认为 false，如需使用 css modules 功能，则设为 true
                }
            }
        }
    }
    if (process.env.NODE_ENV === 'development') {
        // 本地开发构建配置（不混淆压缩）
        return merge({}, baseConfig, devConfig)
    }
    // 生产构建配置（默认开启压缩混淆等）
    return merge({}, baseConfig, prodConfig)
})
